#ifndef LISTA_H
#define LISTA_H

#include <string>
#include <list>

#include "../../TipoDeDato.h"
#include "../../tipos_basicos.h"
#include "../../headermmparametro.h"

struct NodoLista{
    int valor;
    NodoLista* siguienteNodo;
};

class Lista : implements TipoDeDato {

public:

    Lista();
    Lista(string valor);
    Lista(void* punteroADato);

    static int dameTamano(NodoLista* nodo);

    void agregarElemento(int valor);

    virtual void comparar(TipoDeDato& tipoDeDato,ostream& out);

    virtual void* damePunteroAMemoria();

    virtual ClaseDeDato getClass();

    virtual ~Lista();

private:

    static bool esCircular(NodoLista* nodoActual);

    static bool buscarPuntero(list<NodoLista*>& lista, NodoLista* nodo);

    NodoLista* buscarNodoFinal();

    int tamano;

};

#endif // LISTA_H
